package com.example.dto;

import com.example.model.dto.BaseDTO;
import com.example.utils.DateUtils;
import com.example.utils.TreeNode;
import com.example.validator.group.AddGroup;
import com.example.validator.group.DefaultGroup;
import com.example.validator.group.UpdateGroup;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.Hidden;
import jakarta.validation.constraints.*;
import io.swagger.v3.oas.annotations.media.Schema;

import java.io.Serializable;

import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;
import java.util.List;

/**
 * 分类表
 *
 * @author yyyyjinying 1020066395@qq.com
 * @since 1.0-SNAPSHOT 2025-04-27
 */
@Data
@Schema(description = "分类表")
@JsonIgnoreProperties(ignoreUnknown = true) // 标注 UserDetail 类以忽略未知属性
public class ZyCategoriesDTO extends TreeNode<ZyCategoriesDTO> implements Serializable {
    private static final long serialVersionUID = 1L;

    @Schema(description = "租户ID")
    private Long tenantId;
    @Schema(description = "门店ID")
//    @NotNull(message = "storeId不能为空", groups = DefaultGroup.class)
    private Long storeId;
    private List<Long> sysStoreList;
    @Schema(description = "分类名称")
    @NotNull(message = "分类name不能为空", groups = DefaultGroup.class)
    private String name;
    @Schema(description = "分类描述")
    private String description;
    @Schema(description = "是否启用：1-启用，0-禁用")
    private Integer isActive;
    @Schema(description = "分类图片URL")
    private String imageUrl;
    @Schema(description = "排序字段，默认值为0")
    private Integer sortOrder;

    /**
     * 创建者
     */
    @Schema(description = "创建者")
    @Hidden
    @JsonIgnore // 忽略该字段的序列化（输出 JSON 时不显示）
    @JsonProperty("creator") // 允许反序列化（接收 JSON 数据时解析该字段）
    private Long creator;
    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    @Hidden
    @JsonFormat(locale="zh", timezone="GMT+8", pattern= DateUtils.DATE_TIME_PATTERN)
    @DateTimeFormat(pattern = DateUtils.DATE_TIME_PATTERN)
    private Date createDate;

    /**
     * 更新者
     */
    @Schema(description = "更新者")
    @Hidden
    @JsonIgnore // 忽略该字段的序列化（输出 JSON 时不显示）
    @JsonProperty("updator") // 允许反序列化（接收 JSON 数据时解析该字段）
    private Long updator;
    /**
     * 更新时间
     */
    @Schema(description = "更新时间") // 序列化（Java 对象转为 JSON）和反序列化（JSON 转为 Java 对象）
    @Hidden
    @JsonFormat(locale="zh", timezone="GMT+8", pattern= DateUtils.DATE_TIME_PATTERN)
    @DateTimeFormat(pattern = DateUtils.DATE_TIME_PATTERN)
    private Date updateDate;

}